Cloud computing is becoming an increasingly important aspect of the Internet. In cloud computing, resources (for example, servers or desktop computers) and applications are virtualized on the Internet and packaged for sale to customers. Cloud computing is attractive to potential customers because it allows them to purchase needed computing services without incurring high up-front costs. Examples of cloud computing product offerings include infrastructure as a service (IAAS), platform as a service (PAAS) and software as a service (SAAS).
In a large number of cloud computing workloads, the servers are under-utilized in terms of CPU utilization. Virtual machines (VMs) have been used to increase consolidation ratios on servers thereby reducing the total cost of ownership (TCO) for infrastructure providers. Consolidation ratios increase as more instances of virtual hardware are able to be implemented on a single physical machine.
As consolidation ratios increase, the amount of physical memory available in the machine starts becoming a bottleneck. One technique to address this problem is known as memory overprovisioning. In memory overprovisioning, information that is used by multiple virtual machines is shared in physical memory. Memory overprovisioning allows an increase in consolidation ratios while keeping the physical memory requirements lower than would be possible if all memory was partitioned across virtual machines.
A specific example of a memory overprovisioning technique is known as page sharing. Page sharing provides for the opportunistic sharing of memory pages that have the same content across virtual machines. However, page sharing techniques consume system resources (overhead) in determining whether memory pages may be shared. The system resources used to dynamically monitor page sharing operations are essentially not available to do useful work for virtual machines.